package fr.miage.ageco.web.beans;

import java.io.Serializable;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import org.primefaces.event.RowEditEvent;
import org.primefaces.event.SelectEvent;
import org.primefaces.event.UnselectEvent;

import fr.miage.ageco.dataaccess.bo.Projet;
import fr.miage.ageco.dataaccess.services.ProjetService;

@ViewScoped
@ManagedBean
public class ProjetBean implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1040118866280783931L;

	ProjetService projetService;

	private List<Projet> listProjet;
	private List<Projet> filteredProjet;
	private Projet selectedProjet;
	

	private int id;
	private String nom;
	private String dateDebut;
	private String dateFin;
	private String etat;
	

	public ProjetBean() {

	}

	@PostConstruct
	public void init() {
		listProjet = getAllProjet();
	}

	// Méthodes pour l'IHM
	
	public List<Projet> getAllProjet() {
		return projetService.getAllProjet();
	}

	// Ajout
	public String insertProjet() {

		Projet projet = new Projet();

		// getNom() pour récupérer le nom saisi par l'utilisateur dans le champ
		projet.setNom(getNom());
		projet.setDateDebut(getDateDebut());
		projet.setDateFin(getDateFin());
		projet.setEtat(getEtat());
		

		// Ajout dans la BD
		projetService.insertProjet(projet);

		// Rechargement de la liste
		listProjet = getAllProjet();
		
		FacesMessage msg = new FacesMessage("Projet ajouté : ",
				(projet.getNom()));
		FacesContext.getCurrentInstance().addMessage(null, msg);
		return "";
	}

	// Modification
	public void onEdit(RowEditEvent event) {
		FacesMessage msg = new FacesMessage("Projet édité :",
				((Projet) event.getObject()).getId() + "");
		// Modification de l'objet en base
		projetService.updateProjet((Projet) (event.getObject()));
		// Rechargement de la liste
		listProjet = getAllProjet();
		
		FacesContext.getCurrentInstance().addMessage(null, msg);
	}

	// suppression
	public void onCancel(RowEditEvent event) {
		FacesMessage msg = new FacesMessage("Projet supprimé :",
				((Projet) event.getObject()).getId()+"");
		//suppression dans le tableau
		listProjet.remove((Projet) event.getObject());
		//suppression en base
		projetService.deleteProjet((Projet) event.getObject());
		//Affichage du message
		FacesContext.getCurrentInstance().addMessage(null, msg);
	}
	
	// Sélection d'une ligne
	public void onRowSelect(SelectEvent event) {  
        FacesMessage msg = new FacesMessage("Projet ", ((Projet) event.getObject()).getId() + " sélectionné"); 
       // selectedProjet = (Projet) event.getObject();
  
        FacesContext.getCurrentInstance().addMessage(null, msg);  
    }  
	
	// Déselection de la ligne
    public void onRowUnselect(UnselectEvent event) {  
        FacesMessage msg = new FacesMessage("Projet ", ((Projet) event.getObject()).getId() + " desélectionné");  
  
        FacesContext.getCurrentInstance().addMessage(null, msg);  
    }  

	// Getters & setters

	public ProjetService getProjetService() {
		return projetService;
	}

	public void setProjetService(ProjetService projetService) {
		this.projetService = projetService;
	}

	
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getNom() {
		return nom;
	}

	public void setNom(String nom) {
		this.nom = nom;
	}

	public String getDateDebut() {
		return dateDebut;
	}

	public void setDateDebut(String dateDebut) {
		this.dateDebut = dateDebut;
	}

	public String getDateFin() {
		return dateFin;
	}

	public void setDateFin(String dateFin) {
		this.dateFin = dateFin;
	}

	public String getEtat() {
		return etat;
	}

	public void setEtat(String etat) {
		this.etat = etat;
	}

	public List<Projet> getListProjet() {
		return listProjet;
	}

	public void setListProjet(List<Projet> listProjet) {
		this.listProjet = listProjet;
	}

	public List<Projet> getFilteredProjet() {
		return filteredProjet;
	}

	public void setFilteredProjet(List<Projet> filteredProjet) {
		this.filteredProjet = filteredProjet;
	}

	public Projet getSelectedProjet() {
		return selectedProjet;
	}

	public void setSelectedProjet(Projet selectedProjet) {
		this.selectedProjet = selectedProjet;
	}

}
